[Update] วิธีเพิ่ม Swap Memory ใน Elastic Beanstalk
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
กรณีที่ Memory ของ Instance ที่ถูกสร้างจาก Elastic Beanstalk มีการใช้งานเกินกว่าความจุที่กำหนดไว้ สามารถ Swap Memory ให้กับ Instance ได้โดยตั้งค่าไฟล์ 01_swap.config
ในโฟลเดอร์ .ebextensions
แล้ว Deploy ไปยัง Elastic Beanstalk ก็จะทำให้เพิ่มประสิทธิภาพการทำงานของ Memory ใน Instance ที่ถูกสร้างจาก Elastic Beanstalk และลดการเกิดปัญหา Out of Memory (OOM) ที่อาจทำให้แอปพลิเคชันหยุดทำงานหรือ Crash ได้ครับ
สิ่งที่ต้องมี
- สร้าง Application และ Deploy Project ใน Environment บน Elastic Beanstalk แล้ว
เลือก Deploy Project ใน Elastic Beanstalk ได้ตามลิงก์ด้านล่างนี้
เตรียมไฟล์สำหรับ Deploy ใน Elastic Beanstalk
ไฟล์ที่จะสร้างมีดังนี้
- โฟลเดอร์ ".ebextensions"
- ไฟล์ ".ebextensions/01_swap.config"
สร้างโฟลเดอร์ .ebextensions และไฟล์ 01_swap.config
Project ที่ใช้เป็นตัวอย่างนี้ จะอ้างอิงจากลิงก์บทความด้านล่างนี้ (สามารถดำเนินการใน Project อื่นๆ ได้เช่นเดียวกัน)
การสาธิตนี้เป็นการแนะนำแบบง่ายๆ ก็จะสร้างไฟล์ด้วย Notepad บนอุปกรณ์ Windows
ดูรายละเอียดเพิ่มเติมได้ที่ เตรียมไฟล์สำหรับใช้ Deploy ใน Elastic Beanstalk
การตั้งค่านี้จะ Swap Memory ขนาด 1024 MB
(หรือ 1 GB) ใน Instance ที่สร้างขึ้นจาก Environment
ก่อนอื่นให้สร้างโฟลเดอร์ .ebextensions
ใน Project ที่จะ Deploy และสร้างไฟล์ 01_swap.config
ในโฟลเดอร์ ".ebextensions" อีกที ก็จะเป็น .ebextensions/01_swap.config
แล้วคัดลอก Code ด้านล่างนี้วางลงในไฟล์ 01_swap.config
แล้วบันทึก
*เราสามารถ Swap Memory ได้ตามขนาดที่ต้องการ โดยเปลี่ยนขนาดที่ count=[memory_size]
ที่สำคัญ Storage ต้องมีความจุเพียงพอจึงจะทำ Swap Memory ได้
commands: 01_swap_memory: test: '[ ! -e /var/swap.1 ]' command: | /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 /sbin/mkswap /var/swap.1 /sbin/swapon /var/swap.1
เมื่อเตรียมไฟล์ ".ebextensions/01_swap.config" เสร็จแล้ว ให้บีบอัดไฟล์ Project เป็นไฟล์ ZIP
ซึ่งวิธีการแบบอัดไฟล์มีหลายวิธี แต่ครั้งนี้จะบีบอัดไฟล์ดังนี้
การบีบอัดไฟล์ครั้งนี้จะบีบอัดโฟลเดอร์ .ebextensions
รวมกับไฟล์ info.php
ที่ใช้เป็น Project เนื่องจากสามารถแสดงผลหน้าเว็บไซต์ได้
ดูตัวอย่างเพิ่มเติมได้ที่นี่เฉพาะเนื้อหาการบีบอัดไฟล์นี้: Compress to ZIP file (2 ไฟล์)
วิธีการบีบอัดไฟล์ง่ายๆ คือเลือกไฟล์ที่จะบีบอัด แล้วคลิกขวาที่ไฟล์ใดไฟล์หนึ่ง แล้วเลือก Compress to ZIP file
แล้วตั้งชื่อไฟล์ ZIP ตามต้องการ
เมื่อเตรียมไฟล์เสร็จแล้ว Deploy Project ได้เลย (วิธี Deploy สำหรับกรณีที่ Environment กำลังทำงาน)
เชื่อมต่อกับ Instance ที่ถูกสร้างจาก Elastic Beanstalk ด้วย PuTTY
เชื่อมต่อกับ Instance ที่ถูกสร้างจาก Elastic Beanstalk ด้วย PuTTY เพื่อตรวจสอบผลลัพธ์การตั้งค่า Swap
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: การเชื่อมต่อกับ EC2 Instance ด้วย PuTTY
ตรวจสอบ Swap
รันคำสั่งตรวจสอบ Memory ใน Server Instance ที่สร้างจาก Elastic Beanstalk
free -m
ดูที่แถว Swap จะเห็นว่ามี "total = 1023
(count=1024)" ซึ่งเป็นค่า Memory ที่ได้กำหนดในไฟล์ 01_swap.config
Output
Using username "ec2-user".
Authenticating with public key "tinnakorn-swap-config"
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2023 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2. html
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-xx-xx-xx-xx ~]$ free -m
total used free shared buff/cache available
Mem: 909 372 299 26 237 396
Swap: 0 0 0
[ec2-user@ip-xx-xx-xx-xx ~]$ free -m
total used free shared buff/cache available
Mem: 909 369 53 26 485 397
Swap: 1023 0 1023
[ec2-user@ip-xx-xx-xx-xx ~]$
เพียงเท่านี้การทำ Swap Memory ก็เสร็จแล้ว นอกจากนี้เราสามารถทำ Swap Memory โดยการตั้งค่าด้วยภาษาโปรแกรมที่นอกเหนือจาก PHP ได้ (Environment ของ Elastic Beanstalk ที่ใช้ Amazon Linux 2023 จะสามารถใช้งานได้ทั้งหมด)
สรุป
การทำงานของ Swap Memory คือการดึงพื้นที่ Storage ใน EBS มาสร้าง Swap Memory เพื่อทำหน้าที่เป็นหน่วยความจำเสมือน และทำให้ระบบการทำงานของ Linux Instance เร็วขึ้น ซึ่งวิธีนี้เราสามารถใช้กับ Elastic Beanstalk ได้ นอกจากนี้ยังช่วยให้การใช้ EC2 Instance มีราคาที่ถูกขึ้นอีกด้วย ดังนั้นแนะนำให้มาลองทำ Swap Memory กันครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !